// mCountdown.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "mCountdown.h"
#include "todaycmn.h"
#include "TodayPluginWnd.h"
#include "..\share\Config.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CMCountdownApp

BEGIN_MESSAGE_MAP(CMCountdownApp, CWinApp)
	//{{AFX_MSG_MAP(CMCountdownApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMCountdownApp construction

CMCountdownApp::CMCountdownApp()
{
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CMCountdownApp object

CMCountdownApp theApp;

//
// Initilize the DLL by creating a new window
//
HWND InitializeCustomItem(TODAYLISTITEM *ptli, HWND hwndParent) {
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	if (FAILED(CoInitializeEx(NULL, 0)))
		return NULL;

	CTodayPluginWnd::Unregister();
	if (!CTodayPluginWnd::Register()) {
		return NULL;
	}

	TodayPluginWnd.Create(hwndParent);
	TodayPluginWnd.ShowWindow(SW_SHOWNORMAL);
	TodayPluginWnd.UpdateWindow();

	return TodayPluginWnd.GetSafeHwnd();
}

BOOL APIENTRY CustomItemOptionsDlgProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) {
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	switch (message) {
		case WM_INITDIALOG:
			TodayPluginWnd.OpenConfig();
			SendMessage(hDlg, WM_DESTROY, 0, 0);
			return TRUE;
	}

	return DefWindowProc(hDlg, message, wParam, lParam);
}

BOOL CMCountdownApp::InitInstance() {
	HIDPI_InitScaling();

	SHInitExtraControls();
	Config.Load();
				
	return CWinApp::InitInstance();
}

int CMCountdownApp::ExitInstance() {
	Config.Save();
	CTodayPluginWnd::Unregister();
				
	return CWinApp::ExitInstance();
}
